#!/usr/bin/env python
# -*- coding: utf-8 -*-

from werkzeug.security import generate_password_hash, check_password_hash
from ..models.user import User
from ..extensions import db

class AuthService:
    """认证服务，处理用户认证和注册"""
    
    def authenticate(self, username, password):
        """验证用户凭据
        
        Args:
            username: 用户名
            password: 密码
            
        Returns:
            包含认证结果的字典
        """
        # 查找用户
        user = User.query.filter_by(username=username).first()
        
        # 用户不存在
        if not user:
            return {
                'success': False,
                'message': '用户名或密码错误'
            }
        
        # 验证密码
        if not check_password_hash(user.password, password):
            return {
                'success': False,
                'message': '用户名或密码错误'
            }
        
        # 验证成功
        return {
            'success': True,
            'user_id': user.id,
            'user': {
                'id': user.id,
                'username': user.username,
                'email': user.email,
                'created_at': user.created_at.isoformat()
            }
        }
    
    def register(self, user_data):
        """注册新用户
        
        Args:
            user_data: 用户数据字典
            
        Returns:
            包含注册结果的字典
        """
        # 检查用户名是否已存在
        existing_user = User.query.filter_by(username=user_data['username']).first()
        if existing_user:
            return {
                'success': False,
                'message': '用户名已存在'
            }
        
        # 检查邮箱是否已存在
        existing_email = User.query.filter_by(email=user_data['email']).first()
        if existing_email:
            return {
                'success': False,
                'message': '邮箱已被注册'
            }
        
        # 创建新用户
        new_user = User(
            username=user_data['username'],
            email=user_data['email'],
            password=generate_password_hash(user_data['password'])
        )
        
        try:
            # 添加到数据库
            db.session.add(new_user)
            db.session.commit()
            
            return {
                'success': True,
                'user': {
                    'id': new_user.id,
                    'username': new_user.username,
                    'email': new_user.email,
                    'created_at': new_user.created_at.isoformat()
                }
            }
        except Exception as e:
            db.session.rollback()
            return {
                'success': False,
                'message': f'注册失败: {str(e)}'
            } 